const userService = require('../../services/userService');

const verifyRegister = async (req, res, next) => {
  const user = req.body;
  const { username, password, email} = user;
  // console.log(username, password, email,'xxxxxxxxxxxxx');
  // 检查参数是否正确
  if(!username || !password || !email){
    const err = new Error(`用户名或密码或email不能为空`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }
  
  // 检查用户名是否存在
  const userExists = await userService.checkUserExists(username);
  if (userExists) {
    const err = new Error(`用户名已存在`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }
  // 检查email是否存在
  const emailExists = await userService.checkEmailExists(email);
  if (emailExists) {
    const err = new Error(`email已存在`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }
  next()
}

// 用户更新操作时校验中间件
const verifyUpdateUser = async (req, res, next) => {
  const user = req.body;
  const { name, email, id} = user;

  // 检查参数是否正确
  if(!name || !email){
    const err = new Error(`用户名或email不能为空`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }

  // 检查用户id是否存在
  const users = await userService.getUserById(id);
  if (!users?.length) {
    const err = new Error(`用户不存在`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }
  // 检查用户名是否存在
  const userExists = await userService.checkUserExists(name);
  if (userExists) {
    const err = new Error(`用户名已存在`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }
  // 检查email是否存在
  const emailExists = await userService.checkEmailExists(email);
  if (emailExists) {
    const err = new Error(`email已存在`);
    err.statusCode = 400; // 设置状态码
    next(err); // 传递给错误处理中间件
  }
  next()
}

// 对密码进行加密
const bcrypt = require('bcrypt');
const hashPassword = async (req, res, next) => {
  req.body.password = await bcrypt.hash(req.body.password, 10);
  next()
}

module.exports = {
  verifyRegister,
  hashPassword,
  verifyUpdateUser
}